In [1]:
from tdshub.gridlabd import Gridlabd

Using the interface

In [2]:
b = Gridlabd()

b.houses(120)
b.recorders(['voltage', 'load'])
b.interval("1min")
b.end_time("2013-07-02 04:00:00")
Out[2]:
<tdshub.gridlabd.interface.gridlabd.Gridlabd at 0x10df67790>
In [3]:
b.execute()
executed in 52.7629449368 seconds, (1876182, 7)
Out[3]:
<tdshub.gridlabd.interface.gridlabd.Gridlabd at 0x10df67790>

Advanced interface

Create a list of objects and their min voltage.

In [7]:
df = b.df()

tmp = df.vmask('attr_group', 'voltage')
tmp = tmp.groupby(['name']).agg('min')['value'].map(lambda x: round(x))

text = tmp.to_frame().to_dict()['value']

Color the nodes black that have voltage.

In [8]:
volt_names = df.vmask('attr_group', 'voltage')['name'].unique()
volt = { x: 'black' for x in volt_names }

Selection

In [9]:
s = b[['node', 'transformer', 'node', 'triplex_meter', 'house']]
s.plot(color=volt, text=text, size=1, labels=True)

Remove low-voltage houses

In [10]:
import pandas as pd

df = b.df()

def remove_house(tmp, house_name):
    g = tmp._graph
    triplex_node = (g[['node', 'transformer', 'triplex_node', 'house']]
                    .predecessors(house_name)[0])
    
    triplex_line = (g[['node', 'transformer', 'triplex_node', 'line', 'house']]
                    .predecessors(triplex_node)[0])
    
    g.delete_subgraph(triplex_line, inplace=True)

def house_triplex_meter(tmp):
    g = tmp._graph
    df = tmp.df()
    volt = df.vmask('attr_group', 'voltage')
    volt = volt.groupby(['name']).agg('min')['value'].map(lambda x: round(x))
    
    volt_lookup = volt.to_dict()
    sub = g[['node', 'transformer', 'triplex_meter', 'house']]
    for house_name in sub.names("house"):
        triplex_meter = sub.predecessors(house_name)[0]
        yield {'house': house_name, 'triplex_meter': triplex_meter, 'voltage': volt_lookup[triplex_meter]}
In [11]:
print(len(b._graph.names("house")))
        
volt = pd.DataFrame(list(house_triplex_meter(b))).sort_values(by="voltage")

for house in volt[volt['voltage']<110]['house'].values:
    remove_house(b, house)
    
print(len(b._graph.names("house")))
101
80
In [ ]: